// 云函数入口文件
// 创建和更新记录
// 1.以openid 为用户id来添加更新删除数据(更改同一条数据)
// 2.包含所有邮卡、更新时间、随机奖品
const cloud = require('wx-server-sdk')

cloud.init()
const db = cloud.database();
const col = db.collection('lesson020');
const _ = db.command;

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext();

  // 查询该用户在数据库中的记录
  let user = await col.where({
    '_openid': wxContext.OPENID
  }).get();

  let type
  // 随机邮字 先获取结果 后续符合条件可直接取用type
  let rand = Math.random();
  switch (true) {
    case (rand < 0.3):
      type = 0;
      break;
    case (rand < 0.6 && rand >= 0.3):
      type = 1;
      break;
    case (rand < 0.9 && rand >= 0.6):
      type = 2;
      break;
    case (rand >= 0.9):
      type = 3;
      break;

  }

  // 用户记录长度为0 代表第一次使用 使用add操作
  if(user.data.length == 0){

    let words = [
      { name: '邮家贷', type: 0, number: 0 },
      { name: '邮薪贷', type: 1, number: 0 },
      { name: '邮学贷', type: 2, number: 0 },
      { name: '邮掌贷', type: 3, number: 0 },
    ]

    // 控制随机一个字 +1
    words[type].number += 1
    let data = {
      '_openid': wxContext.OPENID,
      'words': words,
      updateTime: getDay(),
      times: 1,
      prize: null
    }
    let result = await col.add({
      data: data
    })
    return {
      msg: '添加成功',
      result: result,
      type
    }
    
  }else{
    // 除第一外 都是更新操作
    user = user.data[0];

    if(user.times == 0 && user.updateTime == getDay()){
      return {
        msg:'今天次数已经用完，明天继续~~',
        success:false
      }
    }

    // times代表剩余次数，在第二天时重置
    let times;
    if(user.updateTime !== getDay()){
      times = 1;
    }

    // 增加一个
    user.words[type].number += 1

    let result = await col.where({
      '_openid': wxContext.OPENID
    }).update({
      data: {
        'words':user.words,
        // 可用次数减一
        // 若times不被赋值 则自减
        'times': times || _.inc(-1),
        // 获取今天日期
        'updateTime': getDay()
      }
    });

    return {
      msg:'修改成功',
      result : result,
      type
    }

  }


}


function getDay(){
  let d = new Date()
  return d.getFullYear() + '-' + d.getMonth()+1 + '-' + d.getDate();
}